package com.ly.base.chapter03;

import java.util.*;
import java.util.stream.Stream;

/**
 * 收集
 */
public class AKCollectDemo {
    record Hero(String name,int strength){ }

    /**
     * 收集：将元素收集入容器
     *  collect() -> c,(c,x) -> void)
     *
     *  () -> c            创建容器 c
     *  (c,x) -> void      将元素 x 加入 容器 c
     */
    public static void main(String[] args) {
        Stream<String> stream = Stream.of("令狐冲", "风清扬", "独孤求败", "方证",
                "东方不败", "冲虚", "向问天", "任我行", "不戒", "不戒", "不戒", "不戒");

        /**
         * 1)List集合
         * ArrayList::new    () -> new ArrayList()
         * ArrayList::add    (list,x) -> list.add(x)
         * collect(new容器,收集规则，(a,b) -> {}) // 第三个参数默认
         */
//        [令狐冲, 风清扬, 独孤求败, 方证, 东方不败, 冲虚, 向问天, 任我行, 不戒, 不戒, 不戒, 不戒]
//        List<String> reslut = stream.collect(() -> new ArrayList<>(), (list, x) -> list.add(x), (a, b) -> {});
        //[令狐冲, 风清扬, 独孤求败, 方证, 东方不败, 冲虚, 向问天, 任我行, 不戒, 不戒, 不戒, 不戒]
//        List<String> reslut = stream.collect(ArrayList::new, ArrayList::add, (a, b) -> {});

        // 2)Set集合（重复数据不会重复添加）
        //[令狐冲, 冲虚, 向问天, 任我行, 方证, 独孤求败, 东方不败, 不戒, 风清扬]
//        Set<String> reslut = stream.collect(HashSet::new, HashSet::add, (a, b) -> {});

        // 3)Map集合
        // (map,x) ->
        // (map,k,v) -> map.put(k,v)
        //{令狐冲=1, 冲虚=1, 向问天=1, 任我行=1, 方证=1, 独孤求败=1, 东方不败=1, 不戒=1, 风清扬=1}
//        Map<String,Integer> reslut = stream.collect(HashMap::new, (map,x) -> map.put(x,1), (a, b) -> {});


        // 4）StringBuilder 字符串容器
        //令狐冲风清扬独孤求败方证东方不败冲虚向问天任我行不戒不戒不戒不戒
//        StringBuilder reslut = stream.collect(StringBuilder::new, StringBuilder::append, (a, b) -> {});

        // 5)StringJoiner 字符串容器拼接加 分隔符
        //令狐冲,风清扬,独孤求败,方证,东方不败,冲虚,向问天,任我行,不戒,不戒,不戒,不戒
        StringJoiner reslut = stream.collect(() -> new StringJoiner(","), StringJoiner::add, (a, b) -> {});

        System.out.println(reslut.toString());

    }
}
